From 86e4f7d1f305574a1d7e412efc56db8d02f23eb2 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 28 Jun 2005 02:46:11 +0000 Subject: [PATCH] Fix positioning at the end of the line for lines ending in invisible 2005-06-27 Matthias Clasen * gtk/gtktextlayout.c (gtk_text_layout_move_iter_to_line_end): Fix positioning at the end of the line for lines ending in invisible characters. (gtk_text_layout_get_line_display): Set display->layout to a PangoLayout, even for totally invisible lines. --- ChangeLog | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-8 | 6 ++++++ gtk/gtktextlayout.c | 14 +++++++++++--- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index f06c29e422..0fd22505f0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2005-06-27 Matthias Clasen + * gtk/gtktextlayout.c (gtk_text_layout_move_iter_to_line_end): + Fix positioning at the end of the line for lines ending + in invisible characters. + (gtk_text_layout_get_line_display): Set display->layout + to a PangoLayout, even for totally invisible lines. + * gtk/gtkmenushell.c (gtk_menu_shell_grab_broken): Ignore GrabBroken events which are caused by overgrabbing inside the application; menus rely on these for their operation. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index f06c29e422..0fd22505f0 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,11 @@ 2005-06-27 Matthias Clasen + * gtk/gtktextlayout.c (gtk_text_layout_move_iter_to_line_end): + Fix positioning at the end of the line for lines ending + in invisible characters. + (gtk_text_layout_get_line_display): Set display->layout + to a PangoLayout, even for totally invisible lines. + * gtk/gtkmenushell.c (gtk_menu_shell_grab_broken): Ignore GrabBroken events which are caused by overgrabbing inside the application; menus rely on these for their operation. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index f06c29e422..0fd22505f0 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,11 @@ 2005-06-27 Matthias Clasen + * gtk/gtktextlayout.c (gtk_text_layout_move_iter_to_line_end): + Fix positioning at the end of the line for lines ending + in invisible characters. + (gtk_text_layout_get_line_display): Set display->layout + to a PangoLayout, even for totally invisible lines. + * gtk/gtkmenushell.c (gtk_menu_shell_grab_broken): Ignore GrabBroken events which are caused by overgrabbing inside the application; menus rely on these for their operation. diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c index a44bf785be..3a564c42ba 100644 --- a/gtk/gtktextlayout.c +++ b/gtk/gtktextlayout.c @@ -1847,7 +1847,14 @@ gtk_text_layout_get_line_display (GtkTextLayout *layout, * with sequences of invisible lines. */ if (totally_invisible_line (layout, line, &iter)) - return display; + { + if (display->direction == GTK_TEXT_DIR_RTL) + display->layout = pango_layout_new (layout->rtl_context); + else + display->layout = pango_layout_new (layout->ltr_context); + + return display; + } /* Find the bidi base direction */ base_dir = line->dir_propagated_forward; @@ -2955,9 +2962,10 @@ gtk_text_layout_move_iter_to_line_end (GtkTextLayout *layout, * are inside a paragraph to avoid going to next line on a * forced break not at whitespace. Real fix is to keep track * of whether marks are at leading or trailing edge? */ - if (direction > 0 && layout_line->length > 0 && !gtk_text_iter_ends_line (iter)) + if (direction > 0 && layout_line->length > 0 && + !gtk_text_iter_ends_line (iter) && + !_gtk_text_btree_char_is_invisible (iter)) gtk_text_iter_backward_char (iter); - break; } -- 2.30.2